package com.itheima.controller.request;

import com.itheima.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

/**
 * https://docs.spring.io/spring-framework/docs/5.3.19-SNAPSHOT/reference/html/web.html#mvc-ann-arguments
 */
@Controller
public class RequestBodyController {

    /**
     * @TODO 需求1：当前端传递的参数json对象，后端如何将接收到参数转化为User对象呢？
     * {"id":1,"age":18,"name":"tom","birthDay":"2022-01-01 01:01:01"}
     * 第1步：添加注解@RequestBody： 从请求体中获取传递的参数（json字符串）
     * 第2步：添加了Jackson依赖：spring框架就会检查是否有该依赖，如果有该依赖就会调用该Jackson方法完成对json字符串转换成User对象
     */
    @RequestMapping("/json1")
    public String json1(@RequestBody User user) {
        System.out.println("user = " + user);
        return "success";
    }

    /**
     * @TODO 需求：当前端传递的参数是json数组，后端如何将接收到参数转化为List<User>对象呢？
     * [
     * {"id":1,"age":18,"name":"tom","birthDay":"2022-01-01 01:01:01"},
     * {"id":2,"age":28,"name":"jack","birthDay":"2022-02-01 01:01:01"}
     * ]
     */
    @RequestMapping("/json2")
    public String json2(@RequestBody List<User> list) {
        System.out.println("list = " + list);
        return "success";
    }

    /**
     * @TODO 需求2：使用springmvc完成文件上传，例如：上传一张图片itheima.png，上传后的图片的名称是随机名称
     * 关于文件上传小常识：
     * 1、所有文件上传发送请求一定要是post请求，form表单提交
     * 2、所有文件上传内容类型：multipart/form-data
     * <p>
     * 实现思路：
     * 1.产生一个随机字符串，作为图片名称
     * 2.获取文件后缀
     * 3.将文件上传到指定的目录（如果不存在该目录，意味创建该目录）
     * 4.将文件复制到磁盘目录
     */
    @PostMapping("/upload")
    public String upload(MultipartFile file) throws IOException {
        //1.获取文件后缀：itheima.png===>".png"
        String originalFilename = file.getOriginalFilename();
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        //2.产生一个随机字符串，作为图片名称:   1asds232
        String fileName = UUID.randomUUID().toString();
        //3.创建文件上传的目录：如果不存在该目录，就创建该目录  D:/upload/
        File uploadPath = new File("D:/upload");
        if (!uploadPath.exists()) {
            //创建文件夹
            uploadPath.mkdirs();
        }
        //4.通过ioc将获取文件复制到磁盘目录底下D:/upload/1asds232.png
        file.transferTo(new File("D:/upload/" + fileName + suffix));
        return "success";
    }

}
